//! # 这是一个简单的文件搜索工具。
//! 它是我的第一个 Rust 项目，用于融会贯通 Rust 语言的基础知识。
//! 这里，是梦开始的地方。
use std::env;
use mygrep::{Command, run};

fn main() {
    /* 读取命令行参数
    运行方式：cargo run -- 关键字 文件路径
    其中：-- 后面的内容会被当作参数传递给程序
    */
    let args: Vec<String> = env::args().collect();

    /* 解析命令行参数，返回要搜索的关键字和要搜索的文件路径。

    unwrap_or_else 方法：是定义在 Result<T,E> 上的常用方法：
     - 如果 Result 是 Ok，那该方法就类似 unwrap：返回 Ok 内部的值；
     -如果是 Err，就调用闭包中的自定义代码对错误进行进一步处理
    */
    let command = Command::build(&args).unwrap_or_else(|err| {
        // 如果解析失败，打印错误信息，并退出程序
        println!("解析命令行错误：{err}");
        std::process::exit(1);
    });

    println!(
        "解析成功：搜索关键字：{}，检索文件的路径：{}\n",
        command.query, command.file_path
    );

    if let Err(e) = run(command) {
        println!("应用程序错误：{e}");
        std::process::exit(1);
    };
}
